package com.eystar.pdc.controller;

import com.eystar.ext.kit.RecordKit;
import com.eystar.pdc.model.User;
import com.eystar.pdc.util.LoginUtil;
import com.jfinal.core.Controller;
import com.jfinal.core.NotAction;
import com.jfinal.kit.Ret;
import com.jfinal.log.Log;
import com.jfinal.plugin.activerecord.Model;
import com.jfinal.plugin.activerecord.Record;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;

public class BaseController extends Controller {

	protected final Log logger = Log.getLog(getClass());
	
	/**
	 * 获取当前登录用户名
	 * @return
	 */
	@NotAction
	public String getCurrentUserName() {
		User user = (User) getSession().getAttribute(LoginUtil.SESSION_CURRENT_USER);
		return user.getStr("user_name") ;
	}
	
	/**
	 * 获得一个通用的保存类型的对象，里面封装的有：create_user 和 create_time 和  update_time
	 * @param <T>
	 * @param modelClass
	 * @return
	 */
	@NotAction
	public <T extends Model<T>> T getSaveModel(Class<T> modelClass) {
		return getSaveModel(modelClass,null);
	}
	
	/**
	 * 获得一个通用的保存类型的对象，里面封装的有：create_user 和 create_time 和  update_time
	 * @param <T>
	 * @param modelClass
	 * @return
	 */
	@NotAction
	public <T extends Model<T>> T getSaveModel(Class<T> modelClass,String alias) {
		T t = StrUtil.isBlank(alias) ? super.getModel(modelClass) : super.getModel(modelClass,alias);
		try{
			t.set("create_user", getCurrentUserName());
			t.set("create_time", System.currentTimeMillis() / 1000);
			t.set("update_time", System.currentTimeMillis() / 1000);
		}catch(Exception e){
			logger.debug(modelClass.getName()+"没有必要属性，保存时忽略错误");
		}
		return t;
	}
	
	/**
	 * 获得一个通用的更新类型的对象，里面封装的有：update_user 和 update_time
	 * @param <T>
	 * @param modelClass
	 * @return
	 */
	@NotAction
	public <T extends Model<T>> T getUpdateModel(Class<T> modelClass) {
		return getUpdateModel(modelClass,null);
	}
	
	/**
	 * 获得一个通用的更新类型的对象，里面封装的有：update_user 和 update_time
	 * @param <T>
	 * @param modelClass
	 * @return
	 */
	@NotAction
	public <T extends Model<T>> T getUpdateModel(Class<T> modelClass,String alias) {
		T t = StrUtil.isBlank(alias) ? super.getModel(modelClass) : super.getModel(modelClass,alias);
		try{
			t.set("update_user", getCurrentUserName());
			t.set("update_time", System.currentTimeMillis() / 1000);
		}catch(Exception e){
			logger.debug(modelClass.getName()+"没有必要属性，修改时忽略错误");
		}
		return t;
	}
	
	/**
	 * 获取指定参数后，将参数的值转成秒类型
	 * @param paramName
	 * @return
	 */
	public Long getDatePara2Long(String paramName){
		String value = getPara(paramName);
		if (StrUtil.isBlank(value)) {
			return null;
		}
		return DateUtil.parseDate(value).getTime() / 1000;
	}
	
	@NotAction
	public Ret ok(){
		Ret ret = Ret.ok("msg","操作成功！");
		return ret;
	}
	@NotAction
	public Ret ok(String msg){
		Ret ret = Ret.ok("msg",msg);
		return ret;
	}
	@NotAction
	public Ret fail(){
		Ret ret = Ret.fail("msg","操作失败！");
		return ret;
	}
	@NotAction
	public Ret fail(String msg){
		Ret ret = Ret.fail("msg",msg);
		return ret;
	}
	
	@NotAction
	public Record reqToRecord() {
		return RecordKit.toRecord(getRequest());
	}
}
